#ifndef SERVER_VECTORNAV_H
#define SERVER_VECTORNAV_H

#include <ros/ros.h>
#include "geometry_msgs/Quaternion.h" //define the message type of VectorSpace(Quaternion To get X ,Y, Z, W)
#include "geometry_msgs/Vector3.h"  //define the message type of 3 Compnenets used to get acceleration magnetic values through VN
#include "sensor_msgs/Imu.h"

#include "rosVectorNav/vn100_msg.h" //define the message type of vn100
#include "rosVectorNav/KalmanFilteredPosition_msg.h" //for kalman_filter_data

#include "libvectornav.h" // it contains link to vn100.h and math.h
#include "vn100.h" //need to access vn100 functions
#include "vncp_services.h"

/* declaring the VectorNav Class for publishing VN data using ROS */
class VectorNav
{
 public:
   /*Class Constructor */  
   VectorNav(const ros::NodeHandle& nh);
  /*Class Destructor */
  ~VectorNav();

 private:
  /*Creating a handle attribute of VectorNav as a ROS Node */
  ros::NodeHandle _VNNodeHandle;

  /*Create an update function for updating VN data*/
  //void update ();
  
  /* Creating an object attribute for publishing VN data using ROS */ 
  ros::Publisher _vectornavYPRPublisher;
  /* Creating an object attribute for publishing Quaternion data using ROS */ 
  ros::Publisher _vectornavQuaternionPublisher;
  /* Creating an object attribute for publishing Acceleration Rate using ROS */ 
  ros::Publisher _vectornavAccelerationPublisher;
  /* Creating an object attribute for publishing Angular Rate Rate using ROS */ 
  ros::Publisher _vectornavAngularRatePublisher;
   /* Creating an object attribute for publishing Cosine Matrix VnVector3*3 fron VN using ROS */ 
  ros::Publisher _vectornavCosineMatrixPublisher;
   /* Creating an object attribute for publishing Complete IMU data using ROS for robot-pose_ekf */ 
  ros::Publisher _vectornavIMUPublisher;

   /* Creating an object attribute for publishing kalman_filter_data provided by Vector Nav Library */ 
  ros::Publisher _vectornavKalmanFilterPublisher;

  
};

#endif
